/**
 * @(#)EliminacionTranDob.java
 *
 *
 * @author 
 * @version 1.00 2011/10/10
 */

import java.util.*;
public class EliminacionTranDob {
	
	public static void main (String[] args) {
    
    List estado1=new LinkedList();
	List estado2=new LinkedList();
	List estado3=new LinkedList();
	List estado4=new LinkedList();
	List estado5=new LinkedList();
	List Registro=new LinkedList();
	Registro.add("0 100 1");
	Registro.add("1 01 2");
	
	estado2.add("100 1");
	estado3.add("0 0");
	estado3.add("01 2");
	estado5.add("0 1");
	
	estado1.add(0,estado2);
	estado1.add(1,estado3);
	estado1.add(2,estado5);
	
	
	
	estado1=eliminarTran(estado1,Registro);
	
	

	
   
    
    //System.out.println(estado3.get(0));

	
	

	
	
	
}

   public static List eliminarTran(List grafo,List Registro){
   	//formato del registro: A 111 B...indica que desde A hasta B se va con una transicion 111.
   	
   	
   	
   	String Transicion;//string que contenera a cada uno de los registros de transiciones de largo mayor a 1 e la lista.
   	String NumeroYFinalTra;//string que contiene la transicion y el estado al cual va esta transicion
   	String SimboloTran;//contiene los simbolos.
   	List Temp;//lista contenida dentro del grafo.
   	List Temp2=new LinkedList();//segunda lista temporal que servira para almacenar cada transicion en su estado correspondiente
    List Temp3;
   	int Indice;//indica el lugar donde esta esta transicion doble en el grafo 
   	int LargoTran;//entero que indica si es transicion doble, triple,etc.
   	int LargoGraf=grafo.size();//Tomamos el largo inicial del grafo
   	
   
   	 for(int s=0;s<Registro.size();s++){//verificamos cada lugar del registro.
   		Transicion=String.valueOf(Registro.get(s));//almacenamos el contenido f de la lista registro
   		Temp=(List)grafo.get(Integer.parseInt(String.valueOf(Transicion.charAt(0))));//buscamos la lista que indica la posicion 0 de transicion 
   		NumeroYFinalTra=Transicion.substring((Transicion.indexOf(" ")+1),Transicion.length());//almacenamos el substring de lo que queda...111 1
   		Indice=Temp.indexOf(NumeroYFinalTra);//y vemos en que indice de la lista temporal esta.
   		   
   		SimboloTran=NumeroYFinalTra.substring(0,NumeroYFinalTra.indexOf(" "));//cortamos solamente la transicion....111, parte del medio
   	
   		
   		for(int y=0;y<SimboloTran.length()-1;y++){
   			grafo.add(null);//y rellenamos el grafo con los nuevos estados.
   			
   		}
   	 }
   	
   
  
   for(int f=0;f<Registro.size();f++){//verificamos cada lugar del registro.
   		Transicion=String.valueOf(Registro.get(f));//almacenamos el contenido f de la lista registro
   		Temp=(List)grafo.get(Integer.parseInt(String.valueOf(Transicion.charAt(0))));//buscamos la lista que indica la posicion 0 de transicion 
   		NumeroYFinalTra=Transicion.substring((Transicion.indexOf(" ")+1),Transicion.length());//almacenamos el substring de lo que queda...111 1
   		Indice=Temp.indexOf(NumeroYFinalTra);//y vemos en que indice de la lista temporal esta.
   			
   		
   		SimboloTran=NumeroYFinalTra.substring(0,NumeroYFinalTra.indexOf(" "));//cortamos solamente la transicion....111
   		

   		////////////////////////Transicion inicial//////////////////////////////////////////
 
   	   	Temp.set(Indice,NumeroYFinalTra.charAt(0)+" "+(LargoGraf));// la lista temporal se modifica para dejarla con una pura transicion
   		grafo.set(Integer.parseInt(String.valueOf(Transicion.charAt(0))),Temp);//y se modifica en el grafo, se toma el primero de los numeros de en medio
   		
   	    
   	/////////////////////////////////////////////////////////////////////////////////////

   		/////////////////////////Transicion final/////////////////////////////////////////////
  
   		Temp2=AgregarContenidoGrafo(Temp2,NumeroYFinalTra.substring(NumeroYFinalTra.indexOf(" ")-1,NumeroYFinalTra.length()));
   		grafo.set(LargoGraf+SimboloTran.length()-2,Temp2);
   //////////////////////////////////////////////////////////////////////////////////////
		   		
		   		
   		for(int k=0;k<SimboloTran.length()-2;k++){
   	
   		Temp2=AgregarContenidoGrafo(Temp2,NumeroYFinalTra.charAt(NumeroYFinalTra.length()-4-k)+" "+(LargoGraf+SimboloTran.length()-2-k));
   		
   		grafo.set(LargoGraf+SimboloTran.length()-3-k,Temp2);
   		}
   		
   	
   		
   	LargoGraf=LargoGraf+SimboloTran.length()-1;//Para actualizar la posicion inicial de la siguiente transicion.	
   	}//Final
   	
   	//Borrar
   	for(int z=0;z<grafo.size();z++){
   		System.out.println(z+" "+grafo.get(z));
   	}
   /////////////////////
   			
   	return grafo;
   }
   
   
   //Metodo para almacenar valores en la lista temporal 2
   public static List AgregarContenidoGrafo(List A,String B){
   	A=new LinkedList();
      A.add(B);   
   return A;
   }
    
    
}